home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 2 / The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO / clang / jcool01.zip / TEST_VEC.C < prev    next >
C/C++ Source or Header  |  1992-08-12  |  14KB  |  325 lines

  1. //
  2. // Copyright (C) 1991 Texas Instruments Incorporated.
  3. //
  4. // Permission is granted to any individual or institution to use, copy, modify,
  5. // and distribute this software, provided that this complete copyright and
  6. // permission notice is maintained, intact, in all copies and supporting
  7. // documentation.
  8. //
  9. // Texas Instruments Incorporated provides this software "as is" without
  10. // express or implied warranty.
  11. //
  12. // Updated: JAM 08/12/92 -- modernize template syntax, remove macro hacks
  13.  
  14. #include <cool/String.h>
  15. #include <cool/Vector.h>
  16. #include <test.h>
  17.  
  18. #include <cool/Vector.C>
  19.  
  20. Boolean my_compare_int (const int& t1, const int& t2) {
  21.   return ((t1 < t2) ? -1 : 1);
  22. }
  23.  
  24. Boolean my_compare_double (const double& t1, const double& t2) {
  25.   return ((t1 < t2) ? -1 : 1);
  26. }
  27.  
  28. void test_int1 () {  
  29.   CoolVector<int> v0;
  30.   TEST ("CoolVector<int> v0", 1, 1);
  31.   CoolVector<int> v1(3);
  32.   TEST ("CoolVector<int> v1(3)", 1, 1);
  33.   CoolVector<int> v2(4, 4, 1, 1, 1, 1);
  34.   TEST ("CoolVector<int> v2(4,1)",(v2[0]==1 && v2[1]==1 && v2[2]==1 && v2[3]==1),1);
  35.   TEST_RUN ("v1 = v2",v1=v2,(v1[0]==1 && v1[1]==1 && v1[2]==1 && v1[3]==1),1);
  36.   TEST_RUN ("v1==v2", v1=v2, (v1==v2), TRUE);
  37.   TEST_RUN ("v1[0] = 2", v1[0] = 2, (v1[0] == 2), 1);
  38.   TEST_RUN ("v0 = v1",v0=v1,(v0[0]==2 && v0[1]==1 && v0[2]==1 && v0[3]==1),1);
  39.   CoolVector<int> v3 (5,3,2,3,1);
  40.   TEST ("CoolVector<int> v3(5,3,2,3,1)",(v3[0]==2 && v3[1]==3 && v3[2]==1),1);
  41.   CoolVector<int> v4 = v3;
  42.   TEST ("CoolVector<int> v4 = v3", (v4[0]==2 && v4[1]==3 && v4[2]==1),1);
  43.   TEST ("v1!=v2", (v1!=v2), TRUE);
  44.   TEST ("v4==v3", (v4==v3), TRUE);
  45.   TEST ("v1 != v3", ((v1 != v3) ? TRUE : FALSE), TRUE);
  46.   CoolVector<int> v5(v4);
  47.   TEST ("CoolVector<int> v5(v4)",  (v4==v5), TRUE);
  48.   TEST ("v1.length()", v1.length(), 4);
  49. //  v1.fill (5);
  50.   TEST_RUN ("v1.fill(5)",v1.fill (5),(v1[0]==5 && v1[1]==5 && v1[2]==5 && v1[3]==5),1);
  51.   TEST_RUN ("v3.position(3)", v1.fill (5), v3.position(3), 1);
  52. //  v3.copy(v1,1,4);
  53.   TEST_RUN ("v3.copy(v5,1,4)",v3.copy(v1,1,4),(v3[1]==5 && v3[2]==5 && v3[3]==5), 1);
  54.  
  55.   v1=CoolVector<int>(8,8,0,1,2,3,4,5,6,7);
  56.   TEST ("v1=CoolVector<int>(8,8,0,1,2,3,4,5,6,7)",(v1.length()==8 && v1[5]==5),1);
  57.  
  58.  v2=CoolVector<int>(3,3,4,5,6);
  59.   TEST ("v2=CoolVector<int>(3,3,4,5,6)",(v2.length()==3 && v2[2]==6),1);
  60.   TEST ("v1.search(v2)",v1.search(v2), TRUE);
  61.  
  62. //  v0.push (-1);
  63.   TEST_RUN ("v0.push(-1)", v0.push (-1), v0.position(-1), 4);
  64.   TEST ("v0.push_new(1)", (v0.length()==5), 1);
  65.   TEST ("v0.pop()", v0.pop(), -1);
  66.  
  67. //  v1.reverse();
  68.   TEST_RUN ("v1.reverse()", v1.reverse(), (v1[1] == 6), 1);
  69. //  v1.remove(6);
  70.   TEST_RUN ("v1.remove(6)", v1.remove(6), (v1[1] == 6), 0);
  71. //  v0.remove_duplicates();
  72.   TEST_RUN ("v0.remove_duplicates()",v0.remove_duplicates(),v0.length(),2);
  73. //  v4.push(5); v4.push(5); v4.push(5);
  74. //  v0.replace(1,3);
  75.   TEST_RUN ("v0.replace(7,3)",v4.push(5); v4.push(5); v4.push(5); v0.replace(1,3);, v0[1], 3);
  76.  
  77. //  v4.replace_all(5,3);
  78.   TEST_RUN ("v4.replace_all(5,3)", v4.replace_all(5,3), (v4[3]==3 && v4[4]==3 && v4[5]==3), 1);
  79.   TEST ("put(4,3)", v4.put(4,3), TRUE);
  80.   TEST ("get(3)", v4.get(3), 4);
  81.   TEST ("put(5,100)", v4.put(5,100), FALSE);
  82.   TEST ("is_empty()", v4.is_empty(), FALSE);
  83.  
  84. //  v4.clear();
  85.   TEST_RUN ("clear()", v4.clear(), 0, 0);
  86.   TEST_RUN ("is_empty()", v4.clear(), v4.is_empty(), TRUE);
  87. }
  88.  
  89. void test_int2() {
  90.   CoolVector<int> v0 = CoolVector<int>(5,5,3,5,1,7,2);
  91.   TEST ("v0=CoolVector<int>(5,5,3,5,1,7,2)", v0.length(), 5);
  92.   CoolVector<int> v1 = CoolVector<int>(3,3,9,2,6);
  93.   TEST ("v1=CoolVector<int>(3,3,9,2,6)", v1.length(), 3);
  94.   CoolVector<int> v2 = v0;
  95.   TEST ("v2=v0", (v0.length() == v2.length()), 1);
  96.   CoolVector<int> v3 = v1;
  97.   TEST ("v3=v1", (v1.length() == v3.length()), 1);
  98. //   v1.prepend(v0);
  99.   TEST_RUN ("v1.prepend(v0)", v1.prepend(v0), v1.length(), 8);
  100. //   v0.append (v3);
  101.   TEST_RUN ("v0.append(v3)", v0.append (v3), v0.length(), 8);
  102.   TEST ("v0==v1", (v0==v1), TRUE);
  103. //   v2.insert_before(9,3);
  104.   TEST_RUN ("v2.insert_before(9,3)",  v2.insert_before(9,3), v2[3], 9);
  105. //   v2.insert_before(12);
  106.   TEST_RUN ("v2.insert_before(12)", v2.insert_before(12), v2[3], 12);
  107. //   v2.insert_after(11,2);
  108.   TEST_RUN ("v2.insert_after(11,2)", v2.insert_after(11,2), v2[3], 11);
  109. //   v2.insert_after(13);
  110.   TEST_RUN ("v2.insert_after(13)", v2.insert_after(13), v2[4], 13);
  111.   TEST ("v2.position()", v2.position(), 4);
  112.   TEST ("v2.reset()", (v2.reset(),v2.position()), INVALID);
  113.   TEST ("v2.next()", v2.next(), TRUE);
  114.   TEST ("v2.remove()", v2.remove(), 3);
  115.   TEST ("v2.next()", v2.next(), TRUE);
  116.   TEST ("v2.prev()", v2.prev(), TRUE);
  117.   TEST ("v2.value()", v2.value(), 5);
  118. //   v2.sort (my_compare_int);
  119.   TEST_RUN ("v2.sort (my_compare_int)", v2.sort (my_compare_int), (v2[0] <= v2[1] && v2[1] <= v2[2] && v2[2] <= v2[3] && v2[3] <= v2[4] && v2[4] <= v2[5]), 1);
  120.   v1 = CoolVector<int> (4,4,1,2,3,4);
  121.   v2 = CoolVector<int> (4,4,1,3,5,7);
  122.   v3 = v1;
  123.   v1.merge(v2,my_compare_int);
  124.   Boolean success = v1[0] <= v1[1] && v1[1] <= v1[2];
  125.   success = success && v1[2] <= v1[3] && v1[3] <= v1[4];
  126.   success = success && v1[4] <= v1[5] && v1[5] <= v1[6];
  127.   TEST ("v1.merge(v2,my_compare_int)", success, TRUE);
  128. }
  129.  
  130. void test_double1 () {
  131.   CoolVector<double> d0;
  132.   TEST ("CoolVector<double> d0", 1, 1);
  133.   CoolVector<double> d1(3);
  134.   TEST ("CoolVector<double> d1(3)", 1, 1);
  135.   CoolVector<double> d2(4, 1.0);
  136.   TEST ("CoolVector<double> d2(4)",(d2[0]==1.0 && d2[1]==1.0 && d2[2]==1.0 && d2[3]==1.0),1);
  137. //  d1 = d2;
  138.   TEST_RUN ("d1 = d2",d1=d2,(d1[0]==1.0 && d1[1]==1.0 && d1[2]==1.0 && d1[3]==1.0),1);
  139.   TEST_RUN ("d1==d2", d1 = d2, (d1==d2), TRUE);
  140. //  d1[0] = 2.0;
  141.   TEST_RUN ("d1[0] = 2.0", d1[0]=2.0, (d1[0] == 2.0), 1);
  142. //  d0 = d1;
  143.   TEST_RUN ("d0 = d1",d0=d1,(d0[0]==2.0 && d0[1]==1.0 && d0[2]==1.0 && d0[3]==1.0),1);
  144.   CoolVector<double> d3 (5,3,2.0,3.0,1.0);
  145.   TEST ("CoolVector<double> d3(5,3,2.0,3.0,1.0)",(d3[0]==2.0 && d3[1]==3.0 && d3[2]==1.0),1);
  146.   CoolVector<double> d4 = d3;
  147.   TEST ("CoolVector<double> d4 = d3", (d4[0]==2.0 && d4[1]==3.0 && d4[2]==1.0),1);
  148.   TEST ("d1!=d2", (d1!=d2), TRUE);
  149.   TEST ("d4==d3", (d4==d3), TRUE);
  150.   TEST ("d1 != d3", ((d1 != d3) ? TRUE : FALSE), TRUE);
  151.   CoolVector<double> d5(d4);
  152.   TEST ("CoolVector<double> d5(d4)",  (d4==d5), TRUE);
  153.   TEST ("d1.length()", d1.length(), 4);
  154. //  d1.fill (5.0);
  155.   TEST_RUN ("d1.fill(5.0)",d1.fill (5.0),(d1[0]==5.0 && d1[1]==5.0 && d1[2]==5.0 && d1[3]==5.0),1);
  156.   TEST ("d3.position(3.0)", d3.position(3.0), 1);
  157. //  d3.copy(d1,1,4);
  158.   TEST_RUN ("d3.copy(d5,1,4)",d3.copy(d1,1,4),(d3[1]==5.0 && d3[2]==5.0 && d3[3]==5.0), 1);
  159.   d1=CoolVector<double>(8,8,0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0);
  160.   TEST ("d1=CoolVector<double>(8,8,0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0)",(d1.length()==8 && d1[5]==5.0),1);
  161.   d2=CoolVector<double>(3,3,4.0,5.0,6.0);
  162.   TEST ("d2=CoolVector<double>(3,3,4.0,5.0,6.0)",(d2.length()==3 && d2[2]==6.0),1);
  163.   TEST ("d1.search(d2)",d1.search(d2), TRUE);
  164. //  d0.push (-1.0);
  165.   TEST_RUN ("d0.push(-1.0)", d0.push (-1.0), d0.position(-1.0), 4);
  166.   TEST ("d0.push_new(1.0)", (d0.length()==5), 1);
  167.   TEST ("d0.pop()", d0.pop(), -1.0);
  168. //  d1.reverse();
  169.   TEST_RUN ("d1.reverse()", d1.reverse(), (d1[1] == 6.0), 1);
  170. //  d1.remove(6.0);
  171.   TEST_RUN ("d1.remove(6.0)", d1.remove(6.0), (d1[1] == 6.0), 0);
  172. //  d0.remove_duplicates();
  173.   TEST_RUN ("d0.remove_duplicates()",d0.remove_duplicates(),d0.length(),2);
  174. //  d4.push(5.0); d4.push(5.0); d4.push(5.0);
  175. //  d0.replace(1.0,3.0);
  176.   TEST_RUN ("d0.replace(7.0,3.0)",d4.push(5.0); d4.push(5.0); d4.push(5.0);d0.replace(1.0,3.0),d0[1], 3.0);
  177. //  d4.replace_all(5.0,3.0);
  178.   TEST_RUN ("d4.replace_all(5.0,3.0)", d4.replace_all(5.0,3.0),(d4[3]==3.0 && d4[4]==3.0 && d4[5]==3.0), 1);
  179. }
  180.  
  181. void test_double2 () {
  182.   CoolVector<double> d0 = CoolVector<double>(5,5,3.0,5.0,1.0,7.0,2.0);
  183.   TEST ("d0=CoolVector<double>(5,5,3.0,5.0,1.0,7.0,2.0)", d0.length(), 5);
  184.   CoolVector<double> d1 = CoolVector<double>(3,3,9.0,2.0,6.0);
  185.   TEST ("d1=CoolVector<double>(3,3,9.0,2.0,6.0)", d1.length(), 3);
  186.   CoolVector<double> d2 = d0;
  187.   TEST ("d2=d0", (d0.length() == d2.length()), 1);
  188.   CoolVector<double> d3 = d1;
  189.   TEST ("d3=d1", (d1.length() == d3.length()), 1);
  190. //  d1.prepend(d0);
  191.   TEST_RUN ("d1.prepend(d0)", d1.prepend(d0), d1.length(), 8);
  192. //  d0.append (d3);
  193.   TEST_RUN ("d0.append(d3)", d0.append (d3), d0.length(), 8);
  194.   TEST ("d0==d1", (d0==d1), TRUE);
  195. //  d2.insert_before(9.0,3);
  196.   TEST_RUN ("d2.insert_before(9.0,3)", d2.insert_before(9.0,3), d2[3], 9.0);
  197. //  d2.insert_before(12.0);
  198.   TEST_RUN ("d2.insert_before(12.0)", d2.insert_before(12.0), d2[3], 12.0);
  199. //  d2.insert_after(11.0,2);
  200.   TEST_RUN ("d2.insert_after(11.0,2)", d2.insert_after(11.0,2), d2[3], 11.0);
  201. //  d2.insert_after(13.0);
  202.   TEST_RUN ("d2.insert_after(13.0)", d2.insert_after(13.0), d2[4], 13.0);
  203.   TEST ("d2.position()", d2.position(), 4);
  204.   TEST ("d2.reset()", (d2.reset(),d2.position()), INVALID);
  205.   TEST ("d2.next()", d2.next(), TRUE);
  206.   TEST ("d2.remove()", d2.remove(), 3.0);
  207.   TEST ("d2.next()", d2.next(), TRUE);
  208.   TEST ("d2.prev()", d2.prev(), TRUE);
  209.   TEST ("d2.value()", d2.value(), 5.0);
  210. //  d2.sort (my_compare_double);
  211.   TEST_RUN ("d2.sort (my_compare_double)", d2.sort (my_compare_double), (d2[0] <= d2[1] && d2[1] <= d2[2] && d2[2] <= d2[3] && d2[3] <= d2[4] && d2[4] <= d2[5]), 1);
  212.   d1 = CoolVector<double> (4,4,1.0,2.0,3.0,4.0);
  213.   d2 = CoolVector<double> (4,4,1.0,3.0,5.0,7.0);
  214.   d3 = d1;
  215.   d1.merge(d2,my_compare_double);
  216.   Boolean success = d1[0] <= d1[1] && d1[1] <= d1[2];
  217.   success = success && d1[2] <= d1[3] && d1[3] <= d1[4];
  218.   success = success && d1[4] <= d1[5] && d1[5] <= d1[6];
  219.   TEST ("d1.merge(d2,my_compare_double)", success, TRUE);
  220. }
  221.  
  222. typedef char* charP;
  223. Boolean my_compare_charP (const charP& s1, const charP& s2) {
  224.   return (strcmp (s1, s2) ? FALSE : TRUE);
  225. }
  226.  
  227. void test_charP () {  
  228.   CoolVector<char*> c0;
  229.   TEST ("CoolVector<char*> c0", 1, 1);
  230. //  c0.set_compare(&my_compare_charP);
  231.   TEST_RUN ("c0.set_compare(&my_compare_charP)", c0.set_compare(&my_compare_charP), 1,1);
  232.   CoolVector<char*> c1(4);
  233.   TEST ("CoolVector<char*> c1(4)", 1, 1);
  234.   CoolVector<char*> c2(4, "BBB");
  235.   TEST ("CoolVector<char*> c2(4,\"BBB\")",((strcmp (c2[0],"BBB") == 0) && (strcmp (c2[1],"BBB")==0) && (strcmp (c2[2],"BBB")==0) && (strcmp(c2[3],"BBB")==0)),1);
  236. //  c1 = c2;
  237.   TEST_RUN ("c1 = c2",c1=c2,((strcmp (c1[0],"BBB") == 0) && (strcmp (c1[1],"BBB")==0) && (strcmp (c1[2],"BBB")==0) && (strcmp(c1[3],"BBB")==0)),1);
  238.   TEST_RUN ("c1==c2", c1=c2, (c1==c2), TRUE);
  239. //  c1[0] = "CCC";
  240.   TEST_RUN ("c1[0] = \"CCC\"", c1[0] = "CCC", strcmp (c1[0],"CCC"), 0);
  241. //  c0 = c1;
  242.   TEST_RUN ("c0 = c1",c0 = c1,((strcmp (c0[0],"CCC") == 0) && (strcmp (c0[1],"BBB")==0) && (strcmp (c0[2],"BBB")==0) && (strcmp(c0[3],"BBB")==0)),1);
  243.   CoolVector<char*> c3 (5,3,"DDD","EEE","FFF");
  244.   TEST ("CoolVector<char*> c3(5,3,\"DDD\",\"EEE\",\"FFF\")",((strcmp (c3[0],"DDD") == 0) && (strcmp (c3[1],"EEE")==0) && (strcmp (c3[2],"FFF")==0)),1);
  245.   CoolVector<char*> c4 = c3;
  246.   TEST ("CoolVector<char*> c4 = c3", ((strcmp (c4[0],"DDD") == 0) && (strcmp (c4[1],"EEE")==0) && (strcmp (c4[2],"FFF")==0)),1);
  247.   TEST ("c1!=c2", (c1!=c2), TRUE);
  248.   TEST ("c4==c3", (c4==c3), TRUE);
  249.   TEST ("c1 != c3", ((c1 != c3) ? TRUE : FALSE), TRUE);
  250.   CoolVector<char*> c5(c4);
  251.   TEST ("CoolVector<char*> c5(c4)",  (c4==c5), TRUE);
  252.   TEST ("c1.length()", c1.length(), 4);
  253. //  c1.fill ("GGG");
  254.   TEST_RUN ("c1.fill(\"GGG\")",c1.fill ("GGG"),((strcmp (c1[0],"GGG") == 0) && (strcmp (c1[1],"GGG")==0) && (strcmp (c1[2],"GGG")==0)),1);
  255.   TEST ("c3.position(\"DDD\")", c3.position("DDD"), 0);
  256.   TEST ("c5.push(\"GGG\")", c5.push("GGG"), TRUE);
  257.   TEST ("c5.position(\"GGG\")",c5.position("GGG"),3);
  258. //  c3.copy(c5,1,4);
  259.   TEST_RUN ("c3.copy(c5,1,4)",c3.copy(c5,1,4),(strcmp (c3[1],c5[1])==0 && strcmp(c3[2],c5[2])==0 && strcmp (c3[3],c5[3]) ==0), 1);
  260.   TEST ("c3.reset()", (c3.reset(),1),1);
  261.   TEST ("c3.next()",c3.next(),TRUE);
  262.   TEST ("c3.value()", strcmp (c3.value(), "DDD"), 0);
  263.   TEST ("c3.next()",c3.next(),TRUE);
  264.   TEST ("c3.value()", strcmp (c3.value(), "EEE"), 0);
  265.   TEST ("c3.prev()",c3.prev(),TRUE);
  266.   TEST ("c3.value()", strcmp (c3.value(), "DDD"), 0);
  267.   TEST ("c3.next()",c3.next(),TRUE);
  268.   TEST ("c3.value()", strcmp (c3.value(), "EEE"), 0);
  269.   TEST ("c3.next()",c3.next(),TRUE);
  270.   TEST ("c3.value()", strcmp (c3.value(), "FFF"), 0);
  271.   TEST ("c3.next()",c3.next(),TRUE);
  272.   TEST ("c3.value()", strcmp (c3.value(), "GGG"), 0);
  273.   TEST ("c3.next()",c3.next(),FALSE);
  274. }
  275.  
  276. void test_shuffle() {
  277.   CoolVector<int> v0(4,4, 1, 2, 3, 4);
  278.   CoolVector<int> v = v0;
  279.   TEST ("v.find(-1, 0, +1)", v.find(-1, 0, +1), FALSE);
  280.   TEST ("v.find(-2, 3, -1)", v.find(-2, 3, -1), FALSE);
  281.   TEST ("v.find(2, 3, -1)", v.find(2, 3, -1), TRUE);
  282.   TEST ("v.find(1, 0, +1)", v.find(1, 0, +1), TRUE);
  283.   TEST ("v.shuffle_remove()", 
  284.     (v.shuffle_remove()==1 && v[0]==4 && v[1]==2 && v[2]==3 
  285.      && v.length()==3), TRUE);
  286.   TEST ("v.shuffle_remove(2)",
  287.     (v.shuffle_remove(2)==TRUE && v[0]==4 && v[1]==3 
  288.      && v.length()== 2), TRUE);
  289.   TEST ("v.shuffle_remove(2)", v.shuffle_remove(2), FALSE);
  290.   v = v0;
  291.   TEST ("v.shuffle_insert_before(-1, 2)", 
  292.     (v.shuffle_insert_before(-1, 2)==TRUE && v[1]==2 && v[2]==-1 && v[3]==4
  293.      && v[4]==3), TRUE);
  294.   TEST ("v.shuffle_insert_after(-2, 2)", 
  295.     (v.shuffle_insert_after(-2, 2)==TRUE && v[1]==2 && v[2]==-1 && v[3]==-2
  296.      && v[4]==3 && v[5]==4), TRUE);
  297. }
  298.  
  299.  
  300. void test_leak() {
  301.   for (;;) {
  302.     test_int1();
  303.     test_int2();
  304.     test_double1();
  305.     test_double2();
  306.     test_charP();
  307.   }
  308. }
  309.  
  310.  
  311. int main (void) {
  312.   START("CoolVector");
  313.   test_int1();
  314.   test_int2();
  315.   test_double1();
  316.   test_double2();
  317.   test_charP();
  318.   test_shuffle();
  319. #if LEAK
  320.   test_leak();
  321. #endif
  322.   SUMMARY();
  323.   return 0;
  324. }
  325.